package com.ld.common.util.systeminit;

import com.ld.admin.model.system.SysConfigModel;
import com.ld.admin.service.system.SysConfigService;
import com.ld.shieldsb.common.core.model.PropertiesModel;
import com.ld.shieldsb.common.core.model.Result;
import com.ld.shieldsb.common.web.StaticParams;
import com.ld.shieldsb.common.web.util.ConfigurationFileUtil;

import lombok.extern.slf4j.Slf4j;

/**
 * 系统初始化工具
 * 
 * @author <a href="mailto:donggongai@126.com" target="_blank">吕凯</a>
 * @date 2020年6月4日 下午5:52:09
 *
 */
@Slf4j
public class SystemInitUtil {
    public static final String CONFIG_FILE_PREFIX = "init"; // 配置信息文件名称

    public static boolean useInit = PropertiesModel.CONFIG.getBoolean("useInit", true); // 如果不使用请设为false

    private static SysConfigService sysConfigService = new SysConfigService();
    private static SysConfigModel initConfigModel = null;

    public static SystemInitModel system_init_model = null;

    public static final Long INIT = 1L; // 是否初始化 0否1是
    public static final String INIT_NAME = "system_init"; // 是否初始化config名字

    static {
        if (useInit) {
            readObjFromConfigFile();
            initConfigModel = sysConfigService.getConfig(INIT);
            if (initConfigModel != null && "1".equals(initConfigModel.getValue())) {
                system_init_model.setInit(true); // 已经初始化
            } else {
                system_init_model.setInit(false);
            }
            saveObj2ConfigFile(system_init_model);
        }
    }

    /**
     * 保存配置文件
     * 
     * @Title saveObj2ConfigFile
     * @author 吕凯
     * @date 2018年12月21日 下午1:16:21
     * @param model
     * @return Result
     */
    public static Result saveObj2ConfigFile(SystemInitModel model) {
        Result result = getNotUseInitResult();
        if (useInit) {
            result = ConfigurationFileUtil.saveObj2ConfigFile(CONFIG_FILE_PREFIX, model);
            if (result.getSuccess()) {
                system_init_model = model;
            }
        }
        return result;
    }

    public static Result saveInitState2DB(boolean initState) {
        Result result = getNotUseInitResult();
        if (useInit) {
            boolean update = true;
            initConfigModel.setValue(initState ? "1" : "0");
            if (initConfigModel != null) { // 更新
            } else {
                update = false;
                initConfigModel.setId(INIT);
                initConfigModel.setState(StaticParams.STATE_NORMAL);
                initConfigModel.setPid(0L);
                initConfigModel.setName(INIT_NAME);
            }
            return sysConfigService.addOrUpdate(initConfigModel, update, null, null);
        }
        return result;
    }

    private static Result getNotUseInitResult() {
        Result result = new Result();
        result.setMessage("未开启初始化功能！");
        return result;
    }

    public static SystemInitModel readObjFromConfigFile() {
        if (useInit) {
            if (system_init_model == null) {
                // 不存在则查询文件
                system_init_model = ConfigurationFileUtil.readObjFromConfigFile(CONFIG_FILE_PREFIX, SystemInitModel.class);
                if (system_init_model == null) {
                    system_init_model = new SystemInitModel();
                }
            }
            /*if (!system_init_model.isInit()) {// 如果未初始化则需要查询一下数据库
            
            }*/
        }
        return system_init_model;
    }

    /**
     * 判断是否需要系统初始化
     * 
     * @Title needInit
     * @author 吕凯
     * @date 2020年6月5日 下午2:55:55
     * @return boolean
     */
    public static boolean needInit() {
        return useInit && !readObjFromConfigFile().isInit();
//        return true;
    }

}
